/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.compassion.action;

import com.opensymphony.xwork2.ActionContext;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.struts2.ServletActionContext;
import sv.com.compassion.dao.GenericoDAO;
import sv.com.compassion.entidades.Asociacion;
import sv.com.compassion.entidades.Cargo;
import sv.com.compassion.entidades.Empleado;
import sv.com.compassion.entidades.Municipio;
import sv.com.compassion.util.ComunAction;
import sv.com.compassion.util.Constantes;
import sv.com.compassion.util.Fecha;
import sv.com.compassion.util.JqGrid;
import sv.com.compassion.util.RowsGrid;

/** Clase para mantenimiento de usuarios. 
* @author grupo de Tesis
*/
public class UsuarioAction extends ComunAction {
    private GenericoDAO genericoDAO;
    private Empleado empleado;
    private String   nomUsr;
    private String   nomEmp;
    private String   apeEmp;
    private String   cdis;
    private String   municipios;
    private String   cargos;
    private String   VerHis;
    private String   FormaBus;
    private String   FecFin;
    private String   FecIni;
    private String   IdCdi;
    private String   IdRanEda;
    private String   departamento; 
    private String   dui; 
    
 /**
 *Constructor.  
 *@param GenericoDAO interface donde se encuentran los métodos para acceder a 
 * a la clase entidad Empleado. 
 */     
    
    public UsuarioAction(GenericoDAO genericoDAO){
            this.genericoDAO = genericoDAO;
            empleado = new    Empleado(); 
            
            empleado.setIdMunicipio(new Municipio());
            empleado.setIdCargo(new Cargo());
    } 
/**
 * Busca el método que se ejecutara
 */    
     @Override
    public String execute(){
        buscarMetodo(empleado);  
        return null;
    }
 /**
 * @param objeto de la entidad Empleado
 * inserta usuario, haciendo uso de la entidad Empleado.
 */       
    @Override    
    public void agregarEntidad(Object o) {
        Empleado e;
        List<Empleado> listaEmpleado = null;

        try{

            e = (Empleado)o;
            
            Map session = ActionContext.getContext().getSession();
            String idCargo = session.get("idCargo").toString();
            String idUsuario = session.get("idUsuario").toString();
            
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

            e.setEdaEmpleado(edad(sdf.format(e.getFecNacimiento())));
            e.setAuAddUsr(Integer.parseInt(idUsuario));
            e.setAuAddDat(new Date());
                
            genericoDAO.save(e);
            
        }catch(Exception ex){
            Logger.getLogger(UsuarioAction.class.getName()).log(Level.SEVERE, null, ex);
            enviarMensajeStatic(Constantes.MENSAJE_ERROR+ex.getCause().toString(), getResponse());
        }
    }
    
 /**
 * @param objeto de la entidad Empleado
 * Modifica el registro que se recibe de parámetro a inactivo (-1)
 */         
    @Override
    public void borrarEntidad(Object o) {
        List<Empleado> listEmpleado;
        Empleado e;
        try{
            if(getId()!=null){
                listEmpleado = genericoDAO.find("SELECT u FROM Empleado u WHERE u.idEmpleado = " + getId(), null, null);
                if(!listEmpleado.isEmpty()){
                    e = listEmpleado.get(0);
                    e.setEstadoEmp(-1);
                    genericoDAO.update(e);
                }
            }                   
        }catch(Exception ex){
            Logger.getLogger(UsuarioAction.class.getName()).log(Level.SEVERE, null, ex);
            enviarMensajeStatic(Constantes.MENSAJE_ERROR+ex.getCause().toString(), getResponse());
        }
    }
 /**
 * @param objeto de la entidad Empleado
 * Modifica el registro que se recibe de parámetro.
 */    
    @Override
    public void editarEntidad(Object o) {
        Empleado e;
        try{
            e = (Empleado)o;
            e.setIdEmpleado(new Integer(getId()));
            
            
            Map session = ActionContext.getContext().getSession();
            String idUsuario = session.get("idUsuario").toString();
            String idCargo = session.get("idCargo").toString();
            session.put("idEmpleadoT",e.getIdEmpleado());
            
            
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
            e.setEdaEmpleado(edad(sdf.format(e.getFecNacimiento())));
            
            setAuModDat(new Date());
            setAuModUsr(Integer.parseInt(idUsuario));
            
            genericoDAO.update(e);

    /*        Asociacion a;
            int i = 0;
            List<Asociacion> listaAsociacion = null;
            listaAsociacion = genericoDAO.find("SELECT x FROM Asociacion x WHERE x.idEmpleado = '"+ e.getIdEmpleado() +"'", null, null);
            if(!listaAsociacion.isEmpty()){
                while(listaAsociacion.size() > i){
                    a = listaAsociacion.get(i);
                    genericoDAO.delete(a);
                    i++;
                }
            }*/

        }catch(Exception ex){
            Logger.getLogger(UsuarioAction.class.getName()).log(Level.SEVERE, null, ex);
            enviarMensajeStatic(Constantes.MENSAJE_ERROR+ex.getCause().toString(), getResponse());
        }
    }
/**
 * Este método realiza las búsquedas de usuarios, para completar el grid del mantenimiento
 * espera los filtros opcionales:
 *       nomUsr,
 *       nomEmp,
 *       apeEmp, 
 *       cdis,
 *       municipios,
 *       VERhis,
 *       departamento,
 *       dui
 */       
  @Override
  public void alimentarGrid() {
        JqGrid jg = new JqGrid();
        int total = 0;
        
        Map session = ActionContext.getContext().getSession();
        String idUsuario = session.get("idUsuario").toString();
        String idCargo = session.get("idCargo").toString();
        List<Empleado> listaEmpleado = null;
        String query="";
        String queryAux = "";
         
        nomUsr      = getRequest().getParameter("NomUsr");
        nomEmp      = getRequest().getParameter("NomEmp");
        apeEmp      = getRequest().getParameter("ApeEmp");
        cdis        = getRequest().getParameter("Cdis");
        municipios  = getRequest().getParameter("Municipios");
        VerHis      = getRequest().getParameter("VerHis");    
        FormaBus    = getRequest().getParameter("FormaBus");
        departamento= getRequest().getParameter("departamento");
        dui         = getRequest().getParameter("dui");
        

        String nomUsrquery = "";
        String nomEmpquery = "";
        String apeEmpquery = "";
        String cdiEmpquery = "";
        String munEmpquery = "";
        String duiEmpquery = "";
        
       // List listPassEmp = null; 
           
        
        if(idCargo.equals("6") || idCargo.equals("7") || idCargo.equals("8")){
            queryAux = "e.idEmpleado IN (SELECT w.idEmpleado FROM Asociacion w WHERE w.idCdi IN (SELECT x.idCdi FROM Asociacion x WHERE x.idEmpleado = '" + idUsuario + "')) and ";
        }
        nomUsrquery = "e.nomUsuario like upper('%" + nomUsr + "%') ";
        if(!nomEmp .equals("") || !apeEmp.equals("") || !cdis.equals("") || !municipios.equals("")||!dui.equals("")){
            if(!nomEmp.equals("")){
                nomEmpquery = "and e.nomEmpleado like upper('%" + nomEmp + "%') ";
            }
            if(!apeEmp.equals("")){
                apeEmpquery = "and e.apeEmpleado like upper('%" + apeEmp + "%') ";
            }
            if(dui!=null && !dui.equals("")){
                duiEmpquery = "and e.duiEmpleado like upper('%" + dui + "%') ";
            }
            if(municipios != null && !municipios.equals("") && !municipios.equals("null")){
                munEmpquery = "and e.idMunicipio = '" + municipios + "' ";
            }
            if(!cdis.equals("")){
                cdiEmpquery = "e.idEmpleado IN (SELECT x.idEmpleado FROM Asociacion x WHERE x.idCdi = '" + cdis + "') and ";
            }
        }
        String verHistorial;
        String verHistorialTemp = "";
        if(VerHis.equals("true")){
            verHistorial = "-1";
            verHistorialTemp = "1";
        }else{
            verHistorial = "1";
            verHistorialTemp = "1";
        }
        
        try{
                if(getSearch() != null && getSearch().equals("true")){
                    if(getNomEmpleado() != null && ! getNomEmpleado().equals("")){
                        query += "  e.nomEmpleado like upper('%" + getNomEmpleado() + "%') and  ";
                    }                    
                    if(getApeEmpleado() != null && ! getApeEmpleado().equals("")){
                        query += "  e.apeEmpleado like upper('%" + getApeEmpleado() + "%') and  ";
                    }                    
                    if(getTelEmpleado() != null && ! getTelEmpleado().equals("")){
                        query += "  e.telEmpleado like upper('%" + getTelEmpleado() + "%') and  ";
                    }  
                 /*   if(getEdaEmpleado() != null && !getEdaEmpleado().toString().equals("")){
                        query += "  e.edaEmpleado = '" + getEdaEmpleado() + "' and  ";
                    } */
   
                    if(getEmaEmpleado() != null && ! getEmaEmpleado().equals("")){
                        query += "  e.emaEmpleado like upper('%" + getEmaEmpleado() + "%') and  ";
                    }                    
                    if(getCelEmpleado() != null && ! getCelEmpleado().equals("")){
                        query += "  e.celEmpleado like upper('%" + getCelEmpleado() + "%') and  ";
                    }                     
                                    query = query.substring(0, query.length()-5)+" order by e.idMunicipio "+getSord();
                }else{
                    query = "SELECT e FROM Empleado e ";
                    if(departamento!= null && !departamento.equals("") && (municipios == null || municipios.equals("") || municipios.equals("null"))){
                        query += ", Municipio m WHERE m.idMunicipio = e.idMunicipio "+
                        " and m.idDepartamento = "+departamento+ " and ";   
                    }else{
                        query +=   "WHERE ";
                    }         
                    query +=    queryAux + 
                                cdiEmpquery + 
                                nomUsrquery +
                                nomEmpquery +
                                apeEmpquery + 
                                duiEmpquery +
                                munEmpquery +
                                "and e.idCargo > '" + idCargo + "' " +
                                "and (e.estadoEmp like upper('" + verHistorial + "') or "
                                + "e.estadoEmp like upper('" + verHistorialTemp + "'))"
                                + " ORDER BY e.nomEmpleado " + getSord();
                    
                }
                if(FormaBus.equals("1")){ 
                    query="";
                }else{

                    listaEmpleado = genericoDAO.find(query,getRows(),(getRows()*getPage())-getRows());
                    
                    String query2 = "SELECT COUNT(e) FROM Empleado e ";
                    if(departamento!= null && !departamento.equals("") && (municipios == null || municipios.equals("") || municipios.equals("null"))){
                        query2 += ", Municipio m WHERE m.idMunicipio = e.idMunicipio "+
                        " and m.idDepartamento = "+departamento+ " and ";   
                    }else{
                        query2 +=   "WHERE ";
                    }         
                    query2 +=    queryAux + 
                                cdiEmpquery + 
                                nomUsrquery +
                                nomEmpquery +
                                apeEmpquery + 
                                duiEmpquery +
                                munEmpquery +
                                "and e.idCargo > '" + idCargo + "' " +
                                "and (e.estadoEmp like upper('" + verHistorial + "') or "
                                + "e.estadoEmp like upper('" + verHistorialTemp + "'))";
                    
                    total = genericoDAO.countRow(query2);
                    //configuraciones basicas
                    jg.setPage(getPage());
                    jg.setRecords(total);
                    jg.setTotal((int) Math.ceil((double) total / (double) getRows()));
                    jg.setSord(getSord());
                    jg.setSidx(getSidx());
                    List<RowsGrid> rows = new ArrayList<RowsGrid>();
                    
                    /**********************Bloque para obtener el valor del password despues del DECODE***************************/
                  /*  String  passUser  = "select DECODE(e.passUsuario,'c8uf1e36ad1wwqakz3') "
                            + "password, nomEmpleado FROM Empleado e ";
                    passUser    += query.substring(25,query.length());
                    listPassEmp = genericoDAO.queryNative(passUser,null,null);
                    int i = 0;*/
                    /*******************************************************************************/
                    
                    for(Empleado e: listaEmpleado){
                       // Object vec[] = (Object[]) listPassEmp.get(i);
                        RowsGrid r = new RowsGrid(); 
                        r.setId(e.getIdEmpleado().toString());
                        List cell = new ArrayList();
                        cell.add(e.getIdEmpleado().toString());
                        cell.add(e.getNomEmpleado());
                        cell.add(e.getApeEmpleado());

                        cell.add(e.getIdCargo().getIdCargo());
                        cell.add(e.getIdCargo().getNomCargo());

                        cell.add(e.getDirEmpleado());
                        cell.add(e.getTelEmpleado() != null ? e.getTelEmpleado() : "");
                        cell.add(e.getCelEmpleado() != null ? e.getCelEmpleado() : "");
                        cell.add(e.getDuiEmpleado());

                        if(e.getSexEmpleado() == 'M'){ //No debería quedar nulo
                            cell.add("Masculino");
                        }else{
                            cell.add("Femenino");
                        } 

                        cell.add(e.getEdaEmpleado());
                        cell.add(e.getEmaEmpleado() != null ? e.getEmaEmpleado() : "");

                        cell.add(e.getIdMunicipio().getIdMunicipio());
                        cell.add(e.getIdMunicipio().getNomMunicipio());

                        cell.add(e.getNomUsuario() != null ? e.getNomUsuario() : "");
                        cell.add(e.getPassUsuario());
                        cell.add(e.getPassUsuario());
                        cell.add(e.getFecNacimiento().toString());

                        if(e.getEstadoEmp() == 1){
                            cell.add("Activo");
                        }else{
                            cell.add("Inactivo");
                        }

                        cell.add(e.getAuAddUsr());
                        cell.add(e.getAuAddDat().toString());

                        r.setCell(cell);
                        rows.add(r);
                       // i++;
                    }
                
                jg.setRows(rows);
                JSONObject jo = JSONObject.fromObject(jg);
                enviarJsonNavegador(getResponse(), jo);
            }
        }catch(Exception e){
            Logger.getLogger(UsuarioAction.class.getName()).log(Level.SEVERE, null, e);
            enviarMensajeStatic(Constantes.MENSAJE_ERROR+e.getCause().toString(), getResponse());
        }
    }
  
    public void setNomEmpleado(String nomEmpleado){
        empleado.setNomEmpleado(nomEmpleado);
    }
    public String getNomEmpleado(){
        return empleado.getNomEmpleado();
    }
    public void setApeEmpleado(String apeEmpleado){
        empleado.setApeEmpleado(apeEmpleado);
    }
    public String getApeEmpleado(){
        return empleado.getApeEmpleado();
    }  
    public void setDirEmpleado(String dirEmpleado){
        empleado.setDirEmpleado(dirEmpleado);
    }
    public String getDirEmpleado(){
        return empleado.getDirEmpleado();
    }    
    public void setTelEmpleado(String telEmpleado){
        empleado.setTelEmpleado(telEmpleado);
    }
    public String getTelEmpleado(){
        return empleado.getTelEmpleado();
    }     
    public void setCelEmpleado(String celEmpleado){
        empleado.setCelEmpleado(celEmpleado);
    }
    public String getCelEmpleado(){
        return empleado.getCelEmpleado();
    }   
    public void setDuiEmpleado(String duiEmpleado){
        empleado.setDuiEmpleado(duiEmpleado);
    }
    public String getDuiEmpleado(){
        return empleado.getDuiEmpleado();
    } 
    public void setSexEmpleado(Character  sexEmpleado){
        empleado.setSexEmpleado(sexEmpleado);
    }
    public Character getSexEmpleado(){
        return empleado.getSexEmpleado();
    }    
    public void setEdaEmpleado(String  edaEmpleado){
        empleado.setEdaEmpleado(Integer.parseInt(edaEmpleado));
    }
    public String getEdaEmpleado(){
            return String.valueOf(empleado.getEdaEmpleado());
    }      
    public void setEmaEmpleado(String emaEmpleado){
        empleado.setEmaEmpleado(emaEmpleado);
    }
    public String getEmaEmpleado(){
        return empleado.getEmaEmpleado();
    }     
    public Integer getIdMunicipio() {
        return empleado.getIdMunicipio().getIdMunicipio();
    }

    public void setIdMunicipio(Integer idMunicipio) {
       empleado.getIdMunicipio().setIdMunicipio(idMunicipio) ;
    }    
    public void setNomUsuario(String nomUsuario){
        empleado.setNomUsuario(nomUsuario);
    }
    public String getNomUsuario(){
        return empleado.getNomUsuario();
    }      
    public void setFecNacimiento(String fecNacimiento) {
        try {
            empleado.setFecNacimiento(Fecha.string2Date(fecNacimiento));
        } catch (ParseException ex) {
            Logger.getLogger(UsuarioAction.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public String getFecNacimiento() {
        return Fecha.date2String(empleado.getFecNacimiento());
    }  
    public void setPassUsuario(String passUsuario){
        empleado.setPassUsuario(passUsuario);
    }
    public String getPassUsuario(){
        return empleado.getPassUsuario();
    }    
    
    public Integer getIdCargo() {
        return empleado.getIdCargo().getIdCargo();
    }

    public void setIdCargo(Integer idCargo) {
        empleado.getIdCargo().setIdCargo(idCargo);
    }
    
     public Integer getAuAddUsr() {
        return empleado.getAuAddUsr();
    }

    public void setAuAddUsr(Integer auAddUsr) {
       empleado.setAuAddUsr(auAddUsr);
    }

    public String getAuAddDat() {
        return Fecha.date2String(empleado.getAuAddDat());
    }

    public Integer getEstadoEmp() {
        return empleado.getEstadoEmp();
    }

    public void setEstadoEmp(Integer estadoEmp) {
        empleado.setEstadoEmp(estadoEmp);
    }
    
    public void setAuAddDat(String auAddDat) {
        try {
            if(auAddDat != null && !auAddDat.equals("")){
                empleado.setAuAddDat(Fecha.string2Date(auAddDat));
            }
        } catch (ParseException ex) {
            Logger.getLogger(UsuarioAction.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public Integer getAuModUsr() {
        return empleado.getAuModUsr();
    }

    public void setAuModUsr(Integer auModUsr) {
        empleado.setAuModUsr(auModUsr);
    }

    public Date getAuModDat() {
        return empleado.getAuModDat();
    }

    public void setAuModDat(Date auModDat) {
        empleado.setAuModDat(auModDat);
    }
/**
 * Ejecuta el reporte,
 * espera los filtros opcionales:
 *       nomUsr,
 *       nomEmp,
 *       apeEmp, 
 *       cdis,
 *       municipios,
 *       VERhis,
 *       departamento,
 *       dui
 */     
   @Override
    public void reporteXls() {
       
        Map session = ActionContext.getContext().getSession();
        String idUsuario = session.get("idUsuario").toString();
        String idCargo = session.get("idCargo").toString();
       
        String query="";
        String queryAux = "";
         
        nomUsr      = getRequest().getParameter("NomUsr");
        nomEmp      = getRequest().getParameter("NomEmp");
        apeEmp      = getRequest().getParameter("ApeEmp");
        cdis        = getRequest().getParameter("Cdis");
        municipios  = getRequest().getParameter("Municipios");
        VerHis      = getRequest().getParameter("VerHis");    
        FormaBus = getRequest().getParameter("FormaBus");
        departamento = getRequest().getParameter("departamento"); 
        dui         = getRequest().getParameter("dui");        

        String nomUsrquery = "";
        String nomEmpquery = "";
        String apeEmpquery = "";
        String cdiEmpquery = "";
        String munEmpquery = "";
        String duiEmpquery = "";
        
        if(idCargo.equals("6") || idCargo.equals("7") || idCargo.equals("8")){
            queryAux = "u.idEmpleado IN (SELECT w.idEmpleado FROM Asociacion w WHERE w.idCdi IN (SELECT x.idCdi FROM Asociacion x WHERE x.idEmpleado = '" + idUsuario + "')) and ";
        }
        nomUsrquery = "u.nomUsuario like upper('%" + nomUsr + "%') ";

        if(nomEmp != null && !nomEmp.equals("")){
            nomEmpquery = "and u.nomEmpleado like upper('%" + nomEmp + "%') ";
        }
        if(apeEmp != null && !apeEmp.equals("")){
            apeEmpquery = "and u.apeEmpleado like upper('%" + apeEmp + "%') ";
        }
        if(dui!=null && !dui.equals("")){
            duiEmpquery = "and u.duiEmpleado like upper('%" + dui + "%') ";
        }        
        if(municipios != null && !municipios.equals("")&& !municipios.equals("null")){
            munEmpquery = "and u.idMunicipio = '" + municipios + "' ";
        }
        if(cdis != null && !cdis.equals("")){
            cdiEmpquery = "u.idEmpleado IN (SELECT x.idEmpleado FROM Asociacion x WHERE x.idCdi = '" + cdis + "') and ";
        }
        
        String verHistorial;
        String verHistorialTemp = "";
        if(VerHis.equals("true")){
            verHistorial = "-1";
            verHistorialTemp = "1";
        }else{
            verHistorial = "1";
            verHistorialTemp = "1";
        }
        
        query = "SELECT u FROM Empleado u ";
        if(departamento!= null && !departamento.equals("") && (municipios == null || municipios.equals("") || municipios.equals("null"))){
                    query += ", Municipio m WHERE m.idMunicipio = u.idMunicipio "+
                    " and m.idDepartamento = "+departamento+ " and ";   
        }else{
                    query +=   "WHERE ";
        }         
        query +=    queryAux + 
                    queryAux + 
                    cdiEmpquery + 
                    nomUsrquery +
                    nomEmpquery +
                    duiEmpquery +
                    apeEmpquery + 
                    munEmpquery +
                    "and u.idCargo > '" + idCargo + "'" +
                    "and (u.estadoEmp = upper('" + verHistorial + "') or "
                    + "u.estadoEmp = upper('" + verHistorialTemp + "'))"
                    + " ORDER BY u.nomEmpleado asc";
        
        HSSFWorkbook libro  = null;
        OutputStream out    = null;
        HttpServletResponse response = ServletActionContext.getResponse();
        
        try{
                out = response.getOutputStream();            

                // capturamos la direccion absoluta de la plantilla del reporte en el servidor 
            //    String path = getServlet().getServletContext().getRealPath("/xlt/reporteConsolidadoSMS.xlt");
                
                String ruta = ServletActionContext.getRequest().getSession().getServletContext().getRealPath("/reports/reportUsuario.xlt");
                FileInputStream stream = new FileInputStream(ruta); // obtenemos al archivo
                libro = new HSSFWorkbook(stream);      // el libro de trabajo

                response.setHeader("Pragma", "cache");          // Para mostrar ventana de apertura del archivo
                response.setContentType("application/ms-excel");
                response.setHeader("Content-Disposition","attachment;filename=reportUsuario.xls");
        
                libro = generarExcel(libro,query); 

                libro.write(out);
                out.flush();
                out.close();
        }catch(Exception e){
          e.printStackTrace();
        }
        
    }   
  private HSSFWorkbook generarExcel(HSSFWorkbook book, String queryExt) {
          /**
     * EL ESTILO DEL REPORTE
     */
      HSSFCellStyle styleBordere = book.createCellStyle();
      HSSFFont fontReport = book.createFont();
      fontReport.setFontName("Arial");
      fontReport.setFontHeightInPoints((short)10);
      styleBordere.setFont(fontReport);
      styleBordere.setBorderBottom(styleBordere.BORDER_THIN);
      styleBordere.setBorderLeft(styleBordere.BORDER_THIN);
      styleBordere.setBorderRight(styleBordere.BORDER_THIN);
      styleBordere.setBorderTop(styleBordere.BORDER_THIN);
      styleBordere.setAlignment(HSSFCellStyle.ALIGN_CENTER);
      
      List<Empleado> listaEmpleado = null;
      List<Asociacion> listaAsociacion = null;
      
      
   //   String  feConsulta   = (String)getRequest().getParameter("feConsulta");
      
      HSSFSheet sheet = book.getSheet("Hoja1"); //nombre de la hoja 
      HSSFRow row = sheet.getRow(1);
      HSSFCell celda = null;
      Date      today    =   new Date();
      SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    //  String    ahora   =   ;
      row = sheet.createRow(3);
      celda = row.createCell(7);
      celda.setCellValue(new HSSFRichTextString(String.valueOf(sdf.format(today))));
      celda.setCellStyle(styleBordere);
      int col = 1;
      int fila  = 10;
      try{
          String query = queryExt;

         /* if(feConsulta!=null && !feConsulta.equals("")){
            query += " c.fecConsulta = '"+Fecha.date2String(Fecha.string2Date(feConsulta),"yyyy-MM-dd")+"' and  ";
          }*/
          //query = query.substring(0, query.length()-5)+" order by e.idMunicipio ";
          listaEmpleado = genericoDAO.find(query,null,null);
         // listaActividad = genericoDAO.find(query,null,null);

          for(Empleado e: listaEmpleado){

                col = 1;
                row = sheet.createRow(fila);

                celda = row.createCell(col++);
                celda.setCellValue(new HSSFRichTextString(String.valueOf(e.getNomEmpleado()+" "+ e.getApeEmpleado())));
                celda.setCellStyle(styleBordere);

                celda = row.createCell(col++);
                celda.setCellValue(new HSSFRichTextString(String.valueOf(e.getEdaEmpleado())));
                celda.setCellStyle(styleBordere);
                
                celda = row.createCell(col++);
                celda.setCellValue(new HSSFRichTextString(String.valueOf(e.getDuiEmpleado())));
                celda.setCellStyle(styleBordere);
                
                String genero = "";
                if(e.getSexEmpleado() == 'M'){
                    genero = "Masculino";
                }else{
                    genero = "Femenino";
                }  
            
                celda = row.createCell(col++);
                celda.setCellValue(new HSSFRichTextString(genero));
                celda.setCellStyle(styleBordere);    

                celda = row.createCell(col++);
                celda.setCellValue(new HSSFRichTextString(String.valueOf(e.getNomUsuario())));
                celda.setCellStyle(styleBordere);

                celda = row.createCell(col++);
                celda.setCellValue(new HSSFRichTextString(String.valueOf(e.getIdCargo().getNomCargo())));
                celda.setCellStyle(styleBordere);   
                
                String cdiAsociados = "";
                
                listaAsociacion = genericoDAO.find("SELECT x FROM Asociacion x WHERE x.idEmpleado = '" + e.getIdEmpleado() + "'",null,null);

                for(Asociacion x: listaAsociacion){
                    cdiAsociados = cdiAsociados + x.getIdCdi().getNomCdi();
                    cdiAsociados = cdiAsociados + ",";
                }

                if(cdiAsociados.equals("")){ cdiAsociados = "N/A";}
                else{cdiAsociados = cdiAsociados.substring(0, cdiAsociados.length()-1);}
                
                celda = row.createCell(col++);
                celda.setCellValue(new HSSFRichTextString(cdiAsociados));
                celda.setCellStyle(styleBordere);   
                
                fila++;
          }  
      }catch(Exception e){
          e.printStackTrace();
      }    
      return book;  
    }
   public int edad(String fecha_nac) {     //fecha_nac debe tener el formato dd/MM/yyyy
   
    Date fechaActual = new Date();
    SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
    String hoy = formato.format(fechaActual);
    String[] dat1 = fecha_nac.split("/");
    String[] dat2 = hoy.split("/");
    int anos = Integer.parseInt(dat2[2]) - Integer.parseInt(dat1[2]);
    
    int mes = Integer.parseInt(dat2[1]) - Integer.parseInt(dat1[1]);
    if (mes < 0) {
      anos = anos - 1;
    } else if (mes == 0) {
      int dia = Integer.parseInt(dat2[0]) - Integer.parseInt(dat1[0]);
      if (dia < 0) {
        anos = anos - 1;
      }
    }
    return anos;
  }       
    
}
